/**
 * ========== API请求 ==========
 * 书写规则说明:
 * 1，封装了两个基础的ajax方法；主要是因为原有接口和新接口的数据传递格式有变化；要根据不同接口情况使用不同的方法：
 *    ajax_post: application/x-www-form-urlencoded，
 *    ajax_post_json: application/json
 *
 * 2，参数格式规则: {arg1:val1, arg2: val2，arg3: val3 ……}
 *    在保持api请求参数只占一个参数位的原则下，尽量简洁而方便的调用api；
 *    因此，如果接口只需要一个参数，则api方法应该书写为只需要传入对应val值即可（参考 api.clientConsult() ）
 *    其他一个以上的参数，则保持对象格式传入；
 *
 * */


let api = {
    /** 获取用户信息 */
    getUserInfo: function (cb) {
        ajax_post("/User/getUserInfo", null, {
            succ: function (json) {
                cb && cb.succ && cb.succ(funs.mappingUser(json.user));
            },
            fail: function (data) {
                cb && cb.fail && cb.fail(data);
            }
        })
    },
    /** 获取ip定位省市 */
    new_ipLocation: function (cb) {
        ajax_post("/Ip/getIpInfo", null, {
            succ: function (json) {
                cb && cb.succ && cb.succ(json.ip_info);
            },
            fail: function (data) {
                cb && cb.fail && cb.fail(data);
            }
        });
    },
    /** 统计关注微信欢迎语的点击率 */
    event_welcome: function () {
        ajax_post("/Ip/getIpInfo", { event: 'welcome' });
    },
    /** 初始化数据 */
    getInitData: function (cb) {
        ajax_post("/Index/getInitData", null, cb);
    },
    /** 获取项目详情 */
    getDemandInfo: function (data, cb) {
        ajax_post("/Demand/getInfo", data, {
            succ: function (json) {
                globalData.pack.bid_point = json.info.leave_bid_point;
                let info = funs.mappingDemand(json.info);
                cb && cb.succ && cb.succ(info);
            },
            fail: function (json) {
                cb && cb.fail && cb.fail(json);
            }
        });
    },
    /** 获取项目参与的工程商列表 */
    getParticInfo: function (data, cb) {
        ajax_post("/Demand/getParticInfo", data, {
            succ: function (json) {
                json.partic_supplier_list = funs.mappingDemandSupplier(json.partic_supplier_list);
                if (JSON.stringify(json.bronze_partic_info) == "{}") {
                    json.bronze_partic_info = {
                        'id': 0,  // 工程商（用户）id
                        'id_': 0,  // 工程商（用户）id
                        'nickname': '',  // 昵称
                        'hide_nickname': '',
                        'mobile': '', // 参与工程商手机,
                        'follow_type': 0,//1 - 锁定 2-继续跟进 3-取消跟进
                        'status': 0
                    }
                };
                cb && cb.succ && cb.succ(json);
            },
            fail: function (data) {
                cb && cb.fail && cb.fail(data);
            }
        });
    },
    /** 获取项目列表(升序) */
    getDemandList: function (data, cb) {
        data = $.extend({}, { pagesize: 20, sort: "published_at", order: "asc" }, data);
        ajax_post("/Demand/getDemandList", data, {
            succ: function (json) {
                let list = json.list.map(function (item) {
                    return funs.mappingDemand(item);
                });
                cb && cb.succ && cb.succ(list);
            },
            fail: function (data) {
                cb && cb.fail && cb.fail(data);
            }
        });
    },
    /** 获取项目列表(降序) */
    getDemandListDesc: function (data, cb) {
        data = $.extend({}, data, { pagesize: 20, sort: "published_at", order: "desc" });
        ajax_post("/Demand/getDemandList", data, {
            succ: function (json) {
                let list = json.list.map(function (item) {
                    return funs.mappingDemand(item);
                });
                cb && cb.succ && cb.succ(list);
            },
            fail: function (data) {
                cb && cb.fail && cb.fail(data);
            }
        });
    },
    /** 获取今日订单数量 */
    getTodayCnt: function (data, cb) {
        ajax_post("/Supplier/Demand/getTodayCnt", data, cb);
    },
    /** 修改用户信息 */
    updateUserInfo: function (data, cb) {
        ajax_post("/User/updateUser", data, cb);
    },
    /** 获取套餐信息 */
    getMyPack: function (cb) {
        ajax_post("/Supplier/Pack/getMyPack", null, cb);
    },
    /** 获取套餐信息 */
    getPackSet: function (cb) {
        ajax_post("/Supplier/Pack/PackSet", null, cb);
    },
    /** 微信支付 */
    postForWxPay: function (data, cb) {
        ajax_post("/Supplier/Pack/postForWxPay", data, cb);
    },
    /** 微信支付(九折优惠) */
    postForDiscountWxPay: function (data, cb) {
        ajax_post("/Supplier/Pack/postForDiscountWxPay", data, cb);
    },
    /** 购买新项目提醒 */
    buySmsPoints: function (data, cb) {
        ajax_post("/Incr/sms_points", data, cb);
    },
    /** 购买派单点 */
    dispatchPoints: function (data, cb) {
        ajax_post("/Incr/dispatch_points", data, cb);
    },
    /** 购买铜牌服务 */
    bronzePoints: function (data, cb) {
        ajax_post("//Incr/bronze_medal_discount", data, cb);
    },
    /** 修改服务类型 */
    UpdateServiceType: function (data, cb) {
        ajax_post("/supplier/tags", data, cb);
    },
    /** 修改服务区域 */
    updateServiceArea: function (data, cb) {
        ajax_post("/supplier/pack/area", data, cb);
    },
    /** 获取邀请列表 */
    getInviteList: function (cb) {
        ajax_post("/Supplier/invite/getList", null, cb);
    },
    /** 生成邀请卡 */
    createInvitCard: function (cb) {
        ajax_post("/Supplier/invite/create", null, cb);
    },
    /** 项目浏览量+1 */
    demandAddScan: function (data, cb) {
        ajax_post("/Demand/addScan", data, cb);
    },
    /** 上传头像 */
    uploadAvatar: function (data, cb) {
        ajax_post("/Img/uploadAvatar", data, cb);
    },
    /** 更新工程商信息 */
    activeSupplier: function (data, cb) {
        ajax_post("/Supplier/Supplier/activate", data, cb);
    },
    /** 更新工程商信息 */
    bidDemand: function (data, cb) {
        ajax_post("/Supplier/Demand/bid", data, cb);
    },
    /** 退单信息反馈 */
    feedback: function (data, cb) {
        ajax_post("/supplier/feedback", data, cb);
    },
    /** 获取反馈选项 */
    feedbackTypes: function (data, cb) {
        ajax_post("/supplier/feedback/types", data, {
            succ: function (json) {
                cb && cb.succ && cb.succ(json.body);
            },
            fail: function (data) {
                cb && cb.fail && cb.fail(data);
            }
        });
    },
    /** 通过手机号获取用户信息 */
    getInfoByMobile: function (phone, cb) {
        ajax_post("/User/getInfoByMobile", { mobile: phone }, cb);
    },
    /** 登录 */
    Login: function (data, cb) {
        ajax_post("/Login/handleLogin", data, cb);
    },
    /** 获取验证码 */
    sendSmsCaptcha: function (phone, cb) {
        ajax_post("/SmsCaptcha/sendSmsCaptcha", { mobile: phone }, cb);
    },
    /** 绑定微信openID */
    bindWxOpenId: function (data, cb) {
        ajax_post("/User/bindWxOpenId", data, cb);
    },
    /** 工程商认证 */
    certifySupplier: function (data, cb) {
        ajax_post("/Supplier/Supplier/certify", data, cb);
    },
    /** 记录是否显示过了升级提示信息 */
    notifyLevel: function (data, cb) {
        ajax_post("/User/notify", data, cb);
    },
    /** 发布订单 */
    prePost: function (data, cb) {
        ajax_post("/Client/Demand/prePost", data, cb);
    },
    /** 激活草稿订单 */
    activateDemand: function (data, cb) {
        ajax_post("/Client/Demand/activate", data, cb);
    },
    /** 发布采购订单 */
    prePostPurchaseDemand: function (data, cb) {
        ajax_post("/Client/PurchaseDemand/activate", data, cb);
    },
    /** 微信sdk认证 */
    wxSign: function (cb) {
        ajax_post("/wechat/jssdk/sign", null, cb);
    },

    /** 临时，参展所需接口 */
    exhibition: function (data, cb) {
        ajax_post("/exhibition", data, cb);
    },

    /** 支付宝下单 */
    alipayOrder: function (data,cb) {
        ajax_post("/Supplier/Pack/post",data,cb);
    },

    /** 用户事件记录 */
    collectUserMove: function (data) {
        ajax_post("/invite/btn",data);
    },







};

/** ajax请求方法 */
function ajax_post(url, data, cb, timeOut) {
    let time = 30000;
    if(timeOut){time = timeOut};
    let URL = APIURL + url;
    $.ajax(URL, {
        method: 'POST',
        data: data,
        dataType: "json",
        timeout: time,
        xhrFields: {
            withCredentials: true
        },
        headers: {
            'Accept': 'application/x-www-form-urlencoded',
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        contentType: 'application/x-www-form-urlencoded',
        success: function (json, status, xhr) {
            cb && cb.always && cb.always(json);
            if (json.status == "200") {
                cb && cb.succ && cb.succ(json);
            } else {
                cb && cb.fail && cb.fail(json);
            }
        },
        error: function (xhr, status, thrown) {
            console.log("[!err!](" + url + "): status: " + xhr.status + ", msg: " + thrown);
            cb && cb.error && cb.error();
            console.error("接口[" + url + "]：失败");
        }
    });
}
/** ajax请求方法 (application/json)*/
function ajax_post_json(url, data, cb) {
    let URL = APIURL + url;
    $.ajax(URL, {
        method: 'POST',
        data: JSON.stringify(data),
        dataType: "json",
        timeout: 30000,
        xhrFields: {
            withCredentials: true
        },
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        },
        contentType: 'application/json',
        success: function (json, status, xhr) {
            cb && cb.always && cb.always(json);
            if (json.status == "200") {
                cb && cb.succ && cb.succ(json);
            } else {
                cb && cb.fail && cb.fail(json);
            }
        },
        error: function (xhr, status, thrown) {
            console.log("[!err!](" + url + "): status: " + xhr.status + ", msg: " + thrown);
            cb && cb.fail && cb.fail();
            console.error("接口[" + url + "]：失败");
        }
    });
}